◆Apache (WWW)

→日本のApache公式サイト

ここでは、FreeBSDにApacheのインストールと動作確認方法、そして様々な設定を説明しています。

◆最初に決める事

まずApacheをインストールする時、決めておかない事は…

・Apacheのバージョン1.3系列を使用するか? バージョン2.0系列を使用するか?

・FreeBSDのports(もしくはPackage)からインストールするか、
 ソースを直接コンパイルしてインストールするか?

この2つだと思います

バージョン1系列とバージョン2系列で出来る事と出来ない事を知っておけば、
どちらを使用するのか判断がある程度簡単になると思います。

→Apache HTTPサーバー1.3ドキュメント(日本語)

→Apache HTTPサーバー2.0ドキュメント(日本語)新機能の概要

とりあえずUNIXで運用する上での2.0において1.3にはない大きな特徴は
「マルチスレッド対応」「IPv6対応」…かな。
「マルチスレッド」は大規模Webサーバーに本領を発揮するものであり、
自鯖のような小規模Webには効果は分からないようだし、「IPv6」の使用は想定してません。

新機能満載の2.0インストールに心揺れたりもしたのですが、
おそらく自鯖では不要な機能ばかりであるため、
結局「HTTPサーバーとして動作安定性」を重視、
ここは安定したバージョンであるといえる1.3の導入をすることに決めました。

そして、「ports」を使用することにより、
煩雑な初期設定の作業を免れるというのは非常にありがたい事です。


以上の理由から「portsを使用してバージョン1.3系列をインストールする」と決めました。


portsを使用したインストール、
そしてソースからのインストールの両方の説明をしておきたいと思います。

◆portsでApache1.3.xxをインストール

早速インストールを開始したいと思います。
Server# cd /usr/ports/www/apache13/

その前に、portsが公開されている最新バージョンに対応しているか確認だけしておきます。
Server# less Makefile
# New ports collection makefile for: apache HTTPD
# Date created: Fri Aug 25 16:42:36 CDT 1995
# Whom: ache@freebsd.org
#
# $FreeBSD: ports/www/apache13/Makefile,v 1.135 2003/07/18 14:28:07 ache Exp $
#

PORTNAME= apache
PORTVERSION= 1.3.28
CATEGORIES= www

(ずっと続いてますが、省略します)
「PORTVERSION=1.3.28」がバージョンに対応してます。
日本のApache公式サイトで確認したところ、現段階での最新バージョンである事を確認しました。

もしportsが最新バージョンでなければ、cvsupitでportsを最新に更新を読んで実行するか、
このportsのアーカイブを取ってきて使用するなりしてください。

では、早速インストールします。

Server# make install
>> apache_1.3.28.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
>> Attempting to fetch from http://www.apache.org/dist/httpd/.
Receiving apache_1.3.28.tar.gz (2388111 bytes): 100%
2388111 bytes transferred in 11.6 seconds (201.51 kBps)
===> Extracting for apache-1.3.28

(以下メッセージが表示される)

For more information, and contact details about the security
status of this software, see the following webpage:
http://httpd.apache.org/
Server#
と、ソースをApache公式サイトより取ってきて、自動的にコンパイルを始めてくれます。
終了するまで待ちましょう。

最後のお約束です。
Server# make clean
===> Cleaning for libtool-1.3.5_1
===> Cleaning for expat-1.95.6_1
===> Cleaning for apache-1.3.28
ちゃんと依存関係で必要になり、インストールされたファイルの作業データも掃除してくれます。

これでインストールは終了です。

ついでに
Server# rehash
と入力して、今後プログラム実行時のパス指定を省略してもいいでしょう。



◆Apache1.3.xxを手動でインストール

どこでもいいですので、ソースを取ってきて解凍します。

緋色の場合は、クライアントのブラウザ(IE)で公式HPより最新ソースを取ってきて、
それをFTPでadminディレクトリに転送して、その後、「/tmp」にて作業します。

Server# cd /tmp
Server# tar zxvf /home/admin/apache_1.3.28.tar.gz
さくっと解凍です。

Server# cd apache_1.3.28
Server# less INSTALL
とりあえず、ソースを取ってきた場合、それらしい名前のファイルにインストール方法が書かれてます。
一応確認しておきましょう。

   $ ./configure --prefix=PREFIX
   $ make
   $ make install
   $ PREFIX/bin/apachectl start
見ていくと、こんな行が発見できました。
最初に[./configure --prefix=?????????]と指定すれば、指定したディレクトリにインストールされるようです。

Server# ./configure --help
と指定すれば、他に設定可能な項目をすべて表示してくれます。
けっこうややこしいので、初めてインストールする時は読んでおくだけの方が無難です。

Server# ./configure --prefix=/usr/local/apache
(作業)
Server# make
(作業)
Server# make install
以上のように設定してインストールしました。実は「--prefix=」に指定したのは、
何も指定しなかった場合のディフォルト位置であるのですが、一応気分で…(汗)

[make][make install]と順次実行します。


これで一番簡単なインストール方法は終了です。
ソースを展開したディレクトリはサックリ削除してしまいましょう。



◆Apache1.3.の起動と終了

まず、手作業による起動と終了を説明します。


Apacheに付属しているプログラムを使用する一般的な方法を紹介します。

apache起動:

Server# /usr/local/sbin/apachectl start        #portsの場合
Server# /usr/local/apache/bin/apachectl start   #ソースからインストールした場合

apache停止:

Server# /usr/local/sbin/apachectl stop        #portsの場合
Server# /usr/local/apache/bin/apachectl stop   #ソースからインストールした場合

めんどうなので、まとめて表示してみました。

portsを使用した場合と、使用しなかった場合では、
違うディレクトリにインストールされている事に注意してください。

portsを使用した場合、パスが通ってるので、再ログインするか「rehash」というコマンドを
使用することにより、ディレクトリ指定なしで「apachectl」の操作が可能になります。


portsを使用してインストールしたのであれば、起動スクリプトを使用してもいいですね。
Server# /usr/local/etc/rc.d/apache.sh start    #起動

Server# /usr/local/etc/rc.d/apache.sh stop    #停止
この起動スクリプトに関しては、サーバー起動時に自動的に実行されます。
もちろん、ソースからインストールした場合、こんな起動スクリプトは用意されていません。

[httpd.conf]の設定を変更後の再起動方法は
Server# /usr/local/sbin/apachectl restart        #portsの場合

Server# /usr/local/apache/bin/apachectl restart   #ソースからインストールした場合
です。これも覚えておいて損はありません。


次に、念のためhttpdがデーモンとして起動しているか、プロセスを確認してみます。
Server# ps -ax |grep httpd
53278 ?? Ss   0:00.13 /usr/local/sbin/httpd
53279 ?? I    0:00.01 /usr/local/sbin/httpd
53280 ?? I    0:00.01 /usr/local/sbin/httpd
53281 ?? I    0:00.01 /usr/local/sbin/httpd
53282 ?? I    0:00.01 /usr/local/sbin/httpd
53283 ?? I    0:00.01 /usr/local/sbin/httpd
こんな風に表示されたら起動してます。

これが表示されない場合、どこか設定が間違っている可能性があります。
大体の場合、それは「apachectl start」を実行した段階で、どこにエラーがあったのか教えてくれます。
(初期段階で起動しなかった場合、主にServerNameの設定が必要になります)

 IPアドレスを指定しても起動しなかった場合、「ServerName」でまだ問題がある事になります。
 これはApacheはまず起動時「/etc/hosts」をチェックして、ホスト名と対応するIPアドレスを探しているからです。
 「/etc/hosts」に、IPアドレスと、プロンプトから「hostname」で表示されるドメイン名を
 書式に従って登録してやれば起動するはずです。


起動しなかった場合でも、とりあえず先に進んで設定変更を行いましょう。


余談ですが、この中の「Ss」が親プロセスです。(子プロセスを管理している存在)
その他が子プロセス(実際のhttpデーモン)です。
この場合、同時に5つのアクセスまで何の支障なく作業をこなせるという事になりますね。
自鯖ならこれで充分だと思われます。


これで、Webサーバーとして起動完了です!

……え、簡単すぎるって?
まぁまぁ、これからが楽しい設定作業なのです…。


その前に、まずクライアントからちゃんと見れるか確認してみましょう!


◆ブラウザからの動作確認

早速ブラウザから動作確認をして見ましょう。

クライアントからブラウザを起動して、「http://サーバーのIPアドレス/」と入力します。
緋色の場合は、「http://192.168.1.254/」です。



…さて、「インストール時のテストページ」が開いたでしょうか?

予想通りなので、これで問題ないです。


開いたなら、これで動作確認は終了となります。

この段階で、サーバーがグローバルIPを持っているのであれば、
世界中どこからでもインターネットを通じてこのページへのアクセスが可能となっています。

しかしその場合、ブラウザに指定するのはグローバルIPアドレスじゃないと駄目ですが。


余談:自鯖のグローバルIPアドレス確認
Server# ifconfig |grep inet
inet ???.???.???.??? netmask 0x???????? broadcast ???.???.???.???
inet 192.168.1254 netmask 0xffffff00 broadcast 192.168.1.255
inet 127.0.0.1 netmask 0xff000000

この中の「127.0.01」と「192.168.1.254(プライベートIPアドレス)」でない
もう一つのIPアドレス(inet)がサーバーのIPアドレスです。

次は実際の設定…と言いたいところですが、
さらに寄り道して、CGIの動作確認をしておきます。


◆CGIの動作確認

CGIといえば、カウンタとか掲示板に使用するアレですね。
これも使用したいと考えている人が、ほとんどだと思います。

この段階で設定を何もいじってなければ、ディフォルトでCGIの動作が可能になっています。

しかしその場合セキュリティを重視して、CGIは別ディレクトリにて動作するように設定されてます

Apacheの初期設定では、このCGI専用ディレクトリを「cgi-bin」としています。
では、あらかじめインストールされている「printenv」「test-cgi」を実行して、
CGIの動作を確認してみたいと思います。

クライアントからブラウザを起動して、「http://サーバーのIPアドレス/cgi-bin/」と入力します。
緋色の場合は、「http://192.168.1.254/cgi-bin/」です。

今後は、めんどくさいので、以下は緋色のIPアドレスを使用していきます。
各自、自分のサーバーのIPアドレスと置き換えてください。


ブラウザには何と表示されたでしょうか?
おそらく「Forbidden(以下略)」となったと思います。
ここまでは当然です。きちんとファイル名まで指定してやらないと駄目ですので。

次はブラウザから「http://192.168.1.254/cgi-bin/test-cgi」です。

しかしふたたび「Forbidden(以下略)」となったと思います。ブラウザから指定はこれでいいはずです。

なぜ動作しないのか!?


…理由は簡単です。以下、サーバーでの操作になります。

サーバーにログインして、Apacheで指定されている「cgi-bin」ディレクトリに移動です。
Server# cd /usr/local/www/cgi-bin     #portsの場合のディフォルト

Server# cd /usr/local/apache/cgi-bin    #ソースの場合のディフォルト

「ls」を実行して、ちゃんと「printenv」「test-cgi」があるのを確認しましょう。

さてファイル自体は存在するのを確認しました。
次に必要な事は?……そう、このファイルに「実行権限を与える」事です。

Server# chmod +x test-cgi
これが実行権限を与えるコマンドです。これで作業は終了です。

…もういちどブラウザから確認してみましょう。

バッチリ動作したと思います。

これでCGIの動作が可能な事を確認しました。
「printenv」も同じように実行権限を追加して、動作するかどうか確認しておいて下さい。


なお、Apache2.0でもここまでは変わりませんが、
Server# less /usr/local/www/cgi-bin/printenv
#!/usr/local/bin/perl
##
## printenv -- demo CGI program which just prints its environment
##
(以下略。実際のプログラムが書かれています)
「#!/usr/local/bin/perl」と、perlのパスが間違っているため動作しません。
ここを「#!/usr/bin/perl」と修正して、初めて動きます。念のため。


★FreeBSDにおけるPerlのパス指定は「#!/usr/bin/perl」です。
 これは絶対に覚えておいて下さい。


◆Apache1.3.の最終準備

さて、実際にファイルをアップする前にやっておかなければらない事が少しあります。

それは、実際にデータを送信するディレクトリの用意です。


特にportsを使用してインストールしている場合、
ディフォルトページが表示されているディレクトリは単なるリンクです。
ディフォルトページが設置されているディレクトリに転送されるようにリンクが張られているだけです。

ここからは、portsでインストールした時とソースからインストールした時に分けて説明します。


・portsの場合:

まずディレクトリに移動します。
Server# cd /usr/local/www/

リンクを削除して、実際にWebデータをアップするディレクトリを用意しましょう。
いまさら詳しく説明することでもないので、まとめて表示しておきます
Server# rm data
Server# rm cgi-bin
Server# mkdir data
Server# mkdir cgi-bin
これで完了です。


・ソースからインストールした場合:

まずディレクトリに移動します。
Server# cd /usr/local/apache

ここでは一応データは保存しています。
必要ないと思ったら削除してしまってもいいでしょう。
Server# mv htdocs htdocs.old
Server# mv cgi-bin cgi-bin.old
Server# mkdir htdocs
Server# mkdir cgi-bin
以上です。


この段階でブラウザで見てみると、空っぽのページが表示されたと思います。

これで実際にアップする準備は整った…わけじゃなかったりします(汗)

現段階のディレクトリのパーミッション設定では、rootユーザー以外更新不可能です。
つまり、FTPを使用してHPデータの転送は不可能な状態です。


解決方法は2つあります。

・「data(htdocs)」ディレクトリの所有者を、実際にHPデータをアップするアカウントに変更する。(もちろんcgi-binも)

・FTPでサーバーに接続した誰でもアップ出来る様にする。


安全性を重視するなら、間違いなく上です。

下の場合の説明もしておきますが、やはりセキュリティ上よろしくないので、
HP更新専用のアカウントでのみHPをアップできるようにしておいたほうがいいです。


一定アカウントでのみ更新可能にする:
Server# chown admin /usr/local/www/data
Server# chown admin /usr/local/www/cgi-bin
もうソースでインストールした場合の説明はしません…各自読み替えてください。

ディレクトリの所有者をadminアカウントに変更しました。
違うアカウントを使用したい場合、そのアカウントに置き換えてください。


誰でも更新可能にする:
Server# chmod 777 /usr/local/www/data
Server# chmod 777 /usr/local/www/cgi-bin

(元に戻したい場合)
Server# chmod 755 /usr/local/www/data
Server# chmod 755 /usr/local/www/cgi-bin


以上です。

一度FTPソフトで接続して、実際にこのディレクトリにデータが送信できるか確認してみましょう。


◆Apache1.3.の設定を変更をするには?[httpd.conf]

設定ファイルのあるディレクトリです。

Server# cd /usr/local/etc/apache    #portsの場合

Server# cd /usr/local/apache/etc    #ソースの場合


上のどちらの場合であっても、存在する設定ファイルは同じ名前です。

まず、httpdにおけるほとんどの設定は「httpd.conf」にて行います
たくさんファイルはありますが、基本的に「httpd.conf」以外はいじくりません。


なお、「-dist」と名前の後ろについているファイルが存在してますが、
それは設定ファイルの「オリジナル」です。決していじくってはいけません。

オリジナルの設定を確認したい時や、
色々設定を変更してしまって、不具合が起きて元に戻せなくなった場合、
このdistファイルを設定ファイルに上書きコピーして元に戻したりして使用します。


設定を変更した後、その変更を即座にhttpdに反映させる方法:

Server# /(インストールされているディレクトリ)/apachectl restart

新たに設定したhttpd.confファイルに文法エラーがないかどうか確認:
Server# /(インストールされているディレクトリ)/apachectl configtest


◆[httpd.conf]における初期設定

まず、この設定だけはやっておいた方が良い、
もしくは確認しておいた方が良いという項目を上から順に説明してみます。


# Number of servers to start initially --- should be a reasonable ballpark
# figure.
StartServers 5
すこし上で説明しましたが、これはApacheを起動した場合起動される子プロセスの数です。
非常に多いアクセスが予想されるサーバーでは、ここを増やして子プロセスの起動数を増やしたりできます。

…といっても、自鯖であれば、これで充分だと思います。

# Port: The port to which the standalone server listens. For
# ports < 1023, you will need httpd to be run as root initially.
Port 80
ここは非常に大切な項目です。

httpdを起動した場合、どのポートを監視するか決めます。
TCP/IPの規定では、ディフォルトはこの80番ポートです。

もし他のポートで起動したいのであれば、ここの数値を変更します。

8888番ポートに変更した場合、ブラウザから見るとき
「http://サーバーのIPアドレス:8888/」と指定してやれば見ることが可能になります。
(追記「:8888」を付けなくても見えました…IPアドレスだったからかな…どうしてでしょ(汗))

User www
Group www
これは、Apache(子プロセス)を起動させる場合、どのユーザーで動作させるかを決めます。

UNIXの決まり上、サービスをroot権限のアカウントといったものでは動かしません。
この「www」の名前のユーザーとグループは、FreeBSDならディフォルトで用意されています。
(親プロセスはrootで動作してます…念のため)

ソースからインストールした場合、「nobody」となっているかもしれません。
これを「www」に変更してもいいですし、「nobody」はディフォルトで存在しているのでこのままでもいいです。

ServerAdmin you@your.address
ここは、実際にこのWebサーバーを管理者している人間のメールアドレスを入力します。
実際にドメインを取って運用してから入力したらいいと思います。

#ServerName new.host.name
ここは、実際にドメインを取得してドメイン名を持っているのであれば、それを入力します。
それまでは、ここをコメントアウトして未設定でも構いません。

しかし、場合によってはここを設定をしないとhttpd起動時にエラーを出して、
起動しないということもあります。

この場合、コメントアウトを外し、自分のIPアドレスを入力してやれば動作します。

# symbolic links and aliases may be used to point to other locations.
DocumentRoot "/usr/local/www/data"
これも重要ですね。

ブラウザからドメイン名(IPアドレス)のみを入力した時、
どのディレクトリからWebデータを転送するのかを決めています。
このドキュメントルートと呼ばれるディレクトリを変更したい場合、ここで指定します。

ここを変更した場合、すぐ下にある「<Directory "/usr/local/www/data">」もそれに合わせて変更します。


次はちょっと注意が必要なので、まずソースからインストールした場合の設定を見てみます。
<IfModule mod_dir.c>
  DirectoryIndex index.html
</IfModule>
これは、ブラウザが対象のWebサーバーのディレクトリのみを指定した場合、
ディフォルトでどのファイルを表示するかを決めている部分です。
実はmodの機能だったんですね…ふむ。

すこし、フレンドリーにしたいのであれば、
<IfModule mod_dir.c>
  DirectoryIndex index.html index.htm
</IfModule>
としておけば、「index.html」がなかった場合、次は「index.htm」を探してくれます。

これでも見つからなかった場合、
そのディレクトリのオプションにて「indexes」が指定されているならば、
ディレクトリ一覧を、そうでなかった場合、エラーメッセージを表示します。

実はこれだけなのですが、これをがportsをインストールした場合、以下のようになっています。
<IfModule mod_dir.c>
  <IfModule mod_php3.c>
    <IfModule mod_php4.c>
      DirectoryIndex index.php index.php3 index.html
    </IfModule>
    <IfModule !mod_php4.c>
      DirectoryIndex index.php3 index.html
    </IfModule>
  </IfModule>
  <IfModule !mod_php3.c>
    <IfModule mod_php4.c>
       DirectoryIndex index.php index.html
    </IfModule>
    <IfModule !mod_php4.c>
       DirectoryIndex index.html index.htm
    </IfModule>
  </IfModule>
</IfModule>
いやはや、なっがいですねぇ…

下線を引いてありますが、追加するのであれば、ここに追加しましょう。

以下は読み飛ばしてもらって結構ですが、
簡単に説明すると、「mod_php3とmod_php4」がインストールされている場合は一番上を、
「mod_php3」のみなら次を、「mod_php4」のみなら次を設定を使用して、
最後にこのどちらのmodもインストールされていなければ、最後の設定を使用します。

このmodはディフォルトではインストールされていませんので、一番下となります。


次から、一気に下のほうまで移動します。

ErrorLog /var/log/httpd-error.log
これはエラーログを保存する場所と名前を指定しています。
安定動作していたらそんなに確認するものでもないのですが。

portsを使用してインストールした場合「/var/log」に作成されているということを覚えておいて下さい。

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
(少し下に移動)
CustomLog /var/log/httpd-access.log combined
次は、httpd正常動作時にひたすら吐き出されるアクセスログの保存場所と、
そのフォーマットを形式を指定しています。

最初に「LogFormat」にてログのフォーマット形式を決めて、その形式に名前を付けています。
(この場合では「combined」とか「common」)

最後の項目が、このログの保存場所と名前、そして実際にどのフォーマット形式を使用するかを指定しています。

ソースからインストールした場合(/usr/local/apache/logs)であっても、
ここだけはきちんと「/var/log」に変更しておいた方がいいと思われます。
合わせて[httpd-error.log]も[/var/log/httpd-error.log]に移動させておけば幸せになれるかも知れません。

httpdを起動してこのログファイルを長期間放置しておくと、トンデモない容量になります。
注意してください



# Use name-based virtual hosting.
#NameVirtualHost *:80

# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for requests without a known
# server name.
#
#<VirtualHost *:80>
#   ServerAdmin webmaster@dummy-host.example.com
#   DocumentRoot /www/docs/dummy-host.example.com
#   ServerName dummy-host.example.com
#   ErrorLog logs/dummy-host.example.com-error_log
#   CustomLog logs/dummy-host.example.com-access_log common
#</VirtualHost>
ついに登場しました! いま話題のバーチャルホストです!!

「NameVirtualHost *:80」と「<VirtualHost *:80>」の「*」に自分のIPアドレスを登録します。
固定グローバルIPがないのであれば、ローカル側のIPアドレスで大丈夫です。
ポートを変えたい場合、「<VirtualHost *:80>」の80を変更します。
ポート指定が不要なら、「:80」以下は削除してしまっても構いません。

ずらーと並んでいる設定項目のほとんどは、今までに説明したとおりです。
ただ「ServerName」には実際のバーチャルドメイン名を入れます

……まぁ、外部で公開したい場合、
2つ以上の
ドメイン名を持っていないと全くもって使用意義がないのですが。
(ポートをずらせば、IPアドレスだけでもヴァーチャルホストは動作するんですけどね…)
この項目に関しては、(ローカルネットワークで寂しく運用する場合も含めて)いずれ詳しく説明してみたいと思います。


以上でhttpd.confファイルの見学は終了です。
ここでは説明しなかった項目が沢山ありましたが、まず確認しておいた方が良い項目は以上です。

他の項目は、実際に設定の必要が出てきた時に説明します。


以降は、「こういった設定がしたい」という用途に合わせて設定する内容を説明していきます。
自分がやりたい設定の項目のみ読んで頂ければいいと思います。


◆一般アカウントからでもHP公開を可能にする

といっても、ディフォルトで使用可能になっているのですが。
# UserDir: The name of the directory which is appended onto a user's home
# directory if a ~user request is received.
#
<IfModule mod_userdir.c>
   UserDir public_html
</IfModule>
ここがコメントアウトされていない限り、
ユーザーが自分のディレクトリに「public_html」というディレクトリを作成して、
それ以下にアップすれば、「http://(サーバーのIPアドレス/~アカウント)」で閲覧可能となります。


しかしこのままだと、ディレクトリの設定等がめんどうなので、用意してくれてあるものを使用します。
すぐ下に以下の行を見つけたら、下の例のように「#」を外します。
# Control access to UserDir directories. The following is an example
# for a site where these directories are restricted to read-only.
#
<Directory /home/*/public_html>
   AllowOverride FileInfo AuthConfig Limit
   Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
   <Limit GET POST OPTIONS PROPFIND>
     Order allow,deny
     Allow from all
   </Limit>
   <LimitExcept GET POST OPTIONS PROPFIND>
   Order deny,allow
   Deny from all
   </LimitExcept>
</Directory>

そしてhttpdを再起動させれば終了です。

当然ですが初期の設定では一般アカウントではCGIの実行を一切許可してません。注意してください。

この設定の場合、[index.html]ファイル(厳密にはDirectoryIndexで指定されいるファイル)を
置いておかなければ、そのディレクトリの中身が丸見えです。
簡単なデーター公開場所にしたいのであれば、これでもいいかも知れません。
これを許可したくない場合「Options」の項目より「Indexes」を削除しておきます。


次にユーザーが作成する必要のあるディレクトリ「public_html」を「www」に変更したいのであれば、
# UserDir: The name of the directory which is appended onto a user's home
# directory if a ~user request is received.
#
<IfModule mod_userdir.c>
   UserDir public_html
</IfModule>
の「public_html」を「www」に変更してやれば、終了です。

ついでに「public_html」時のディレクトリ属性を保持しておくのに
「<Directory /home/*/public_html>」を「<Directory /home/*/www>」と変更しておくといいかもしれませんね。

次に、HPを閲覧する際の「/~admin」の代わりに「/user/admin/」としたいのであれば、
Alias /user/admin "/home/admin/public_html"
と「mid_alias.c」内でAliasを指定すれば可能です。

他にも、少し変則技っぽいですが
Server# ln -s /home/admin/puclic_html /usr/local/www/data/admin
というように、ディレクトリを直接シンボリックリンクで繋げてしまうという方法もあります。
この場合「/usr/local/www/data/」にアクセス権限があるアカウント(もしくはroot)じゃないと不可能ですが。

逆に言えば、これらを使用すれば、最初の方法を使用しなくても、
一部のアカウントのみがWeb公開を可能にしたりできます。
(もちろん、サーバーの設定にシンボリックリンクの許可…「FollowSymLinks」がないといけませんが)


◆どこからでもCGIの実行を可能にする

現段階では、指定された専用ディレクトリ「cgi-bin」でしか、CGIの実行は許可されていませんでした。

どこからでもCGIを実行したくなった場合の設定方法を説明します。

「httpd.conf」を開きます。
  # AddHandler allows you to map certain file extensions to "handlers",
  # actions unrelated to filetype. These can be either built into the server
  # or added with the Action command (see below)
  #
  # If you want to use server side includes, or CGI outside
  # ScriptAliased directories, uncomment the following lines.
  #
  # To use CGI scripts:
  #
  AddHandler cgi-script .cgi
とこの項目を探して、最後の行「AddHandler cgi-script .cgi」の「#」を外します。

次に
# This should be changed to whatever you set DocumentRoot to.
#
<Directory "/usr/local/www/data">

#
# This may also be "None", "All", or any combination of "Indexes",
# "Includes", "FollowSymLinks", "ExecCGI", or "MultiViews".
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
   Options Indexes FollowSymLinks MultiViews EexcCGI
と、下線を引いて強調しましたが、この「ExecCGI」を追加します。

そしてサーバーを再起動すると、一般ユーザーディレクトリ以外の
(この場合「<Directory "/usr/local/www/data">」以下なら)どこでもCGIが実行可能となります。

もちろん、これはセキュティ上よろしくないためディフォルトでは不許可に設定されていたのであって、
こうすることにより、多少なりともリスクを負うことも理解しておいて下さい。

なお、最初に用意された「cgi-bin」以外のディレクトリでCGIを実行する場合、
トリガーとなるファイルに拡張子「.cgi」は必須です。
(CGI内部で呼び出すファイルであれば、もちろんこれは関係ありません)

下の例に従って「cgi-bin」ディレクトリを停止して、メインディレクトリ(dataやhtdocs以下)に
「cgi-bin」ディレクトリを作成しても、当然トリガーとなるファイルに拡張子「.cgi」は必須です。
合わせて覚えておいて下さい。


「cgi-bin]の専用ディレクトリが不要になったのであれば、
  #ScriptAlias /cgi-bin/ "/usr/local/www/cgi-bin/"

  #
  # "/usr/local/www/cgi-bin" should be changed to whatever your ScriptAliased
  # CGI directory exists, if you have that configured.
  #
  #<Directory "/usr/local/www/cgi-bin">
  #  AllowOverride None
  #  Options None
  #  Order allow,deny
  #  Allow from all
  #</Directory>
と、コメントアウトすることにより、動作を停止させておいて下さい。



[一つ上に戻る]

楽天モバイル[UNLIMITが今なら1円] ECナビでポインと Yahoo 楽天 LINEがデータ消費ゼロで月額500円〜!


無料ホームページ 無料のクレジットカード 海外格安航空券 解約手数料0円【あしたでんき】 海外旅行保険が無料! 海外ホテル